package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.*;
import com.ipartek.formacion.gestformwww.modelo.beans.*;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Xarles & Borja
 */
public class VisualizarAsistenciaAccion implements Accion {

 
    private final String visualizarcurso = "visualizar-curso-accion";
    private final String listarcursos = "listar-cursos-accion";

    /**
     * Visualiza el numero de faltas de un determinado alumno en un curso
     * @param servlet
     * @param request
     * @param response
     * @return
     */
    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) {
        HttpSession sesion;
        sesion = request.getSession();
        AccionRouter router = new AccionRouter("principal");
        AccionServlet as=(AccionServlet) servlet;
        Integer idAlumno = -1;
        String path=null;
        Integer idCurso = -1;
        int faltas = 0;
        Curso curso = new Curso();
        Alumno alumno = new Alumno();
        ArrayList<String> errores = new ArrayList<String>();

        ModeloAlumno malumno = (ModeloAlumno) servlet.getServletContext().getAttribute("ModeloAlumno");
        ModeloDiaClase modelo = (ModeloDiaClase) servlet.getServletContext().getAttribute("ModeloDiaClase");
        ModeloCurso modeloc = (ModeloCurso) servlet.getServletContext().getAttribute("ModeloCurso");
        ArrayList<Asistencia> asistencias = new ArrayList<Asistencia>();

        if ((Verificador.numeroValido(request.getParameter("idAlumno")) || (request.getAttribute("idAlumno") != null))
                && (Verificador.numeroValido(request.getParameter("idCurso")) || (request.getAttribute("idCurso") != null))) {
            if (request.getAttribute("idAlumno") != null) {
                idAlumno = (Integer) request.getAttribute("idAlumno");
            } else {
                idAlumno = Integer.parseInt(request.getParameter("idAlumno"));
            }
            if (request.getAttribute("idCurso") != null) {
                idCurso = (Integer) request.getAttribute("idCurso");
            } else {
                idCurso = Integer.parseInt(request.getParameter("idCurso"));
            }
            try {
                asistencias = modelo.buscarAsistencia(idAlumno, idCurso);
            } catch (GestorFormacionExcepcion ex) {
                sesion.setAttribute("excepciones", ex.getMessage());
                Logger.getLogger(VisualizarAsistenciaAccion.class.getName()).log(Level.SEVERE, null, ex);
            }

            if (asistencias != null) {
                try {
                    curso = modeloc.visualizarCurso(idCurso);
                    alumno = malumno.visualizarAlumno(idAlumno, idCurso);
                    alumno.calcularFaltasMes(curso.getCurFaltasMes());
                    alumno.calcularFaltasTotales(curso.getCurTotalFaltas());
                    if (alumno.isFaltasMes()) {
                        errores.add("error-faltas-mes");
                        request.setAttribute("errores", errores);
                    }
                    if(alumno.isFaltasTotales()){
                        errores.add("error-faltas-totales");
                        request.setAttribute("errores", errores);
                    }
                } catch (GestorFormacionExcepcion ex) {
                    Logger.getLogger(VisualizarAsistenciaAccion.class.getName()).log(Level.SEVERE, null, ex);
                    sesion.setAttribute("excepciones", ex.getMessage());
                }
                request.setAttribute("listaasistencias", asistencias);
                request.setAttribute("contenido-alumno", "asistencia-alumno");
            } else {
                if (request.getParameter("idCurso") != null) {
                    try {
                        request.setAttribute("idCurso", request.getParameter("idCurso"));
                       path= visualizarcurso;
                         router=as.getFactory().getAction(as.getNombreClaseRecurso(path),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                    } catch (ClassNotFoundException ex) {
                        Logger.getLogger(VisualizarAsistenciaAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (InstantiationException ex) {
                        Logger.getLogger(VisualizarAsistenciaAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (IllegalAccessException ex) {
                        Logger.getLogger(VisualizarAsistenciaAccion.class.getName()).log(Level.SEVERE, null, ex);
                    }
                } else {
                    try {
                        path=listarcursos;
                          router=as.getFactory().getAction(as.getNombreClaseRecurso(path),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                    } catch (ClassNotFoundException ex) {
                        Logger.getLogger(VisualizarAsistenciaAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (InstantiationException ex) {
                        Logger.getLogger(VisualizarAsistenciaAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (IllegalAccessException ex) {
                        Logger.getLogger(VisualizarAsistenciaAccion.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }
        } else {
            try {
                path= listarcursos;
                  router=as.getFactory().getAction(as.getNombreClaseRecurso(path),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(VisualizarAsistenciaAccion.class.getName()).log(Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                Logger.getLogger(VisualizarAsistenciaAccion.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                Logger.getLogger(VisualizarAsistenciaAccion.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
       
        return router;
    }

    public void inicializa(AccionFactory factory) {
    }
}
